<?php
/**
 * Created by PhpStorm.
 * User: 正则
 * Date: 2020/8/24
 * Time: 15:44
 */

namespace app\common\enum;

use Helper\ArrayHelper;

/**
 * 枚举类基类   根据之前项目经验，基本情况下就用到以下相关的方法 所有就不用第三方库了，新增的枚举类继承这个基类即可
 * Class Enum
 * @package app\base
 */
class BaseEnum
{
    /**
     * 解析
     * @var array
     */
    protected static $translate = [];

    /**
     * 返回常量数组
     * @return array
     * @throws \ReflectionException
     */
    final public static function toArray()
    {
        //获取当前类的反射
        $ref = new \ReflectionClass(new static());
        $constants = $ref->getConstants();

        return $constants;
    }

    /**
     * 返回某个常量的解析
     * @param $key
     * @return mixed
     */
    final public static function getKeyTranslate($key)
    {
        return isset(static::$translate[$key]) ? static::$translate[$key] : null;
    }

    /**
     * 获取所有的解析或者某一部分的解析
     * @param array $keys 如果传入值则返回特定的解析
     * @return array
     */
    final public static function getTranslates($keys = [])
    {
        $data = [];
        //实例化
        $static = new static;

        //返回特定的解析
        if (!empty($keys)) {
            ArrayHelper::arrayColumn($static::$translate, $keys);
        } else {
            //返回全部
            $data = $static::$translate;
        }
        return $data;
    }
}
